package problema089;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class RomanNumerals {
	
	static String[] numeros;
	static int cantOrig = 0, cantMejorada = 0;
	static Map<Character, Integer> valor = new HashMap<Character, Integer>();
	static Character[] letras = {'I','V','X','L','C','D','M'};
	static Map<Integer, Integer> cantLetras = new HashMap<Integer, Integer>();
	static int[] costos = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
	
	public static void main(String[] args){
		leer();
		System.out.println("Originalmente usaban " + cantOrig + " literales");
		cargarMaps();
		mejorarNumerals();
	}
	
	public static void mejorarNumerals(){
		for(int i = 0; i < numeros.length; i++){
			mejorarNumero(numeros[i]);
		}
		System.out.println("Ahora usan " + cantMejorada + " literales");
		int mejora = cantOrig - cantMejorada;
		System.out.println("Se mejoro en " + mejora + " literales");
	}
	
	public static void mejorarNumero(String n){
		int numero = 0;
		for(int i = 0; i < n.length(); i++){
			if(i == n.length()-1){
				numero += valor.get(n.charAt(i));
				continue;
			}
			if(valor.get(n.charAt(i)) < valor.get(n.charAt(i+1))){
				numero += valor.get(n.charAt(i+1)) - valor.get(n.charAt(i));
				i++;
				continue;
			}
			numero += valor.get(n.charAt(i));
		}
		int cant = 0;
		for(int i = costos.length-1; i >= 0; i--){
			if(numero < costos[i]) continue;
			while(numero >= costos[i]){
				numero -= costos[i];
				cant += cantLetras.get(costos[i]);
			}
		}
		cantMejorada += cant;
	}
	
	
	
	public static void cargarMaps(){
		valor.put(letras[0], 1);
		valor.put(letras[1], 5);
		valor.put(letras[2], 10);
		valor.put(letras[3], 50);
		valor.put(letras[4], 100);
		valor.put(letras[5], 500);
		valor.put(letras[6], 1000);
		
		cantLetras.put(1, 1);
		cantLetras.put(4, 2);
		cantLetras.put(5, 1);
		cantLetras.put(9, 2);
		cantLetras.put(10, 1);
		cantLetras.put(40, 2);
		cantLetras.put(50, 1);
		cantLetras.put(90, 2);
		cantLetras.put(100, 1);
		cantLetras.put(400, 2);
		cantLetras.put(500, 1);
		cantLetras.put(900, 2);
		cantLetras.put(1000, 1);
	}

	
	public static void leer(){
		numeros = new String[1000];
		int pos = 0;
		try{
			BufferedReader reader = new BufferedReader( new FileReader("romanEj89.txt") );
			String linea;
			while ((linea = reader.readLine()) != null){
				numeros[pos] = linea;
				cantOrig += linea.length();
				pos++;
			}
			reader.close();
			}catch (Exception e){
				System.err.println("Error: " + e.getMessage());
			}
	}

}
